import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.item.meta.ItemMeta;
import net.minestom.server.item.ItemMetaBuilder;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.minestom.server.event.player.PlayerUseItemEvent;

public class CustomItemUtils {
    
    // Create custom item with name and lore
    public static ItemStack createCustomItem(Material material, String itemName, String[] lore) {
        ItemStack item = new ItemStack(material, {{itemCount}});
        ItemMeta meta = item.getMeta();
        
        ItemMetaBuilder builder = meta.toBuilder();
        builder.displayName(Component.text("{{itemNamePrefix}}" + itemName).color(NamedTextColor.{{itemNameColor}}));
        
        if (lore != null && lore.length > 0) {
            List<Component> loreComponents = new ArrayList<>();
            for (String line : lore) {
                loreComponents.add(Component.text("{{lorePrefix}}" + line).color(NamedTextColor.{{loreColor}}));
            }
            builder.lore(loreComponents);
        }
        
        if ({{addEnchantment}}) {
            builder.enchantment(Enchantment.{{enchantmentType}}, {{enchantmentLevel}});
        }
        
        return builder.build().toItemStack();
    }
    
    // Create custom weapon
    public static ItemStack createCustomWeapon(Material material, String name, int damage) {
        ItemStack weapon = new ItemStack(material, 1);
        ItemMeta meta = weapon.getMeta();
        
        ItemMetaBuilder builder = meta.toBuilder();
        builder.displayName(Component.text(name));
        
        List<Component> lore = Arrays.asList(
            Component.text("{{damageLabel}}: " + damage).color(NamedTextColor.RED),
            Component.text("{{weaponTypeLabel}}").color(NamedTextColor.GRAY)
        );
        builder.lore(lore);
        
        // Store custom damage in NBT
        if (weapon instanceof TagWritable writable) {
            writable.setTag(Tag.Integer("custom_damage"), damage);
        }
        
        return builder.build().toItemStack();
    }
    
    // Register item use event
    public static void registerCustomItemUse(GlobalEventHandler eventHandler, Material itemMaterial) {
        eventHandler.addListener(PlayerUseItemEvent.class, event -> {
            ItemStack item = event.getItemStack();
            Player player = event.getPlayer();
            
            if (item.getMaterial() == itemMaterial) {
                // Custom item behavior
                player.sendMessage("{{itemUseMessage}}");
                
                if ({{triggerItemEffect}}) {
                    // Apply effect
                    player.addEffect(new PotionEffect(
                        PotionEffectType.{{effectType}},
                        {{effectDuration}},
                        {{effectAmplifier}}
                    ));
                }
                
                if ({{consumeItem}}) {
                    // Consume item
                    item.setAmount(item.getAmount() - 1);
                    player.getInventory().setItemInMainHand(item);
                }
            }
        });
    }
    
    // Create custom food item
    public static ItemStack createCustomFood(Material material, String name, int hungerRestore) {
        ItemStack food = new ItemStack(material, 1);
        ItemMeta meta = food.getMeta();
        
        ItemMetaBuilder builder = meta.toBuilder();
        builder.displayName(Component.text(name));
        
        List<Component> lore = Arrays.asList(
            Component.text("{{hungerLabel}}: " + hungerRestore).color(NamedTextColor.GREEN)
        );
        builder.lore(lore);
        
        return builder.build().toItemStack();
    }
}